<?php
session_start();
require_once '../model/Origem.php';
class OrigemDLO {

    private $origens;
    private static $origemDLO;

    private function __construct() {
    }

    /**
     * @method OrigemDLO getInstance() para obter uma única instância do controlador
     * @return OrigemDLO
     */
    public static function getInstance() {
        if (!isset (self::$origemDLO)) {
            if (!isset ($_SESSION['origemDLO'])) {
                $_SESSION['origemDLO'] = serialize(new OrigemDLO());
            }
            self::$origemDLO = unserialize($_SESSION['origemDLO']);
        }
        return self::$origemDLO;
    }

    public function cadastrar(&$cidade, &$estado, &$pais) {
        $origem = new Origem();
        $origem->setCidade($cidade);
        $origem->setEstado($estado);
        $origem->setPais($pais);
        $origem->cadastrar();
    }

    public function listar() {
        $result = &Origem::listar();
        $resultado = array();
        for ($i = 0; $i < sizeof($result); $i++) {
            $row = array();
            $row['cod_origem'] = &$result[$i]->getCod_origem();
            $row['pais'] = &$result[$i]->getPais();
            $row['estado'] = &$result[$i]->getEstado();
            $row['cidade'] = &$result[$i]->getCidade();
            $resultado[$i] = &$row;
            unset ($row);
        }
        return $resultado;
    }

    public function excluir(&$cod_origem) {
        $origem = null;
        if (isset ($this->origens[$cod_origem])) {
            $origem = &$this->origens[$cod_origem];
        } else {
            $origem = &Origem::consultar($cod_origem);
            $this->origens[$cod_origem] = &$origem;
            $_SESSION['origemDLO'] = serialize($this);
        }
        if ($origem->isVinculado() == 1) {
            throw new Exception("Recurso vinculado");
        }
        $origem->excluir();
        unset($this->origens[$cod_origem]);
        $_SESSION['origemDLO'] = serialize($this);
    }

    public function alterar(&$cod_origem, &$campo_id, &$campo_valor) {
        $origem = null;
        if (isset ($this->origens[$cod_origem])) {
            $origem = &$this->origens[$cod_origem];
        } else {
            $origem = &Origem::consultar($cod_origem);
            $this->origens[$cod_origem] = &$origem;
            $_SESSION['origemDLO'] = serialize($this);
        }
        if ($origem->isVinculado() == 1) {
            throw new Exception("Recurso vinculado");
        }
        $origem->alterarCampo($campo_id, $campo_valor);
        $this->origens[$cod_origem] = &$origem;
        $_SESSION['origemDLO'] = serialize($this);
    }

    public function consultar(&$cod_origem) {
        $origem = null;
        if (isset ($this->origens[$cod_origem])) {
            $origem = &$this->origens[$cod_origem];
        } else {
            $origem = &Origem::consultar($cod_origem);
            $this->origens[$cod_origem] = &$origem;
            $_SESSION['origemDLO'] = serialize($this);
        }
        $row = array();
        $row['cod_origem'] = &$origem->getCod_origem();
        $row['pais'] = &$origem->getPais();
        $row['estado'] = &$origem->getEstado();
        $row['cidade'] = &$origem->getCidade();
        $row['vinculado'] = &$origem->isVinculado();
        return $row;
    }
}
?>